home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / source / music4c.sit / Music4C Folder / Sources Folder / SDheader.c < prev    next >
Text File  |  1990-06-16  |  3KB  |  129 lines

  1. /*
  2. * ⌐ Graeme Gerrard 1990
  3. * Faculty of Music, University of Melbourne
  4. * Parkville Victoria 3052 Australia.
  5. *
  6. * ARPANET: grae@murdu.ucs.unimelb.edu.au
  7. * telephone: (613) 344 4127, Fax: (613) 344 5346
  8. */
  9. #include    "Music4C.h"
  10. #include    <unix.h>
  11. #include    "Music4C_Prototype.h"
  12. #include    "SDtype.h"
  13.  
  14. void    prepareSDfile(double);
  15.  
  16.  
  17. void    prepareSDfile(TotalDuration)
  18.     double    TotalDuration;
  19. {
  20.     WaveRec    Header;
  21.     WavPtr    HeaderPtr;
  22.     register    int    i;
  23.     double    x;
  24.     extern    OSErr    errnum;
  25.     long    aLong;
  26.     int    resid;
  27.     extern            double        srate;        /* sampling rate */
  28.     extern            Str255        SoundFileName;
  29.     extern            ioParam        myIOParmBlk;
  30.     extern            Str255        theMess1;
  31.  
  32.     HeaderPtr = &Header;
  33.  
  34. /* initialize Header info to default values */
  35.     Header.HeaderSize = 1336;
  36.     Header.Version = 0;
  37.     Header.Preview =     0;
  38.     Header.WPtr = 0L;    
  39.     Header.WPeek = 0L;
  40.     Header.HInxPage = 0L;
  41.     Header.HInxLine = 0L;
  42.     Header.VInxPage = 0L;
  43.     Header.VInxLine = 0L;
  44.     Header.HCtlPage = 0L;    
  45.     Header.HCtlLine =  0L;
  46.     Header.VCtlPage = 255L;
  47.     Header.VCtlLine = 65536L;
  48.     Header.VOffset = 0L;    
  49.     Header.HOffset = 0L;
  50.     Header.VOffConst = -1L;
  51.     Header.ZF.v = -256;
  52.     Header.ZF.h = -128L;    
  53.     Header.SF.VFactor =     327L;
  54.     Header.SF.VType =     1032;
  55.     PstringCopy((char *)Header.SF.VString, "\p%Scale");
  56.     Header.SF.HFactor =     1;
  57.     Header.SF.HType = 30L;
  58.     PstringCopy((char *)Header.SF.HString, "\p  secs");
  59.     Header.VScrUpdate = 0;
  60.     Header.BufPtr = 0L;
  61.     Header.BufBytes = 0L;
  62.     Header.BufOffset = 0L;
  63.     Header.WaveRgn = 0L;
  64.     Header.ClipArea = 0L;
  65.     Header.ScaleArea = 0L;
  66.     Header.CtlWidth.top = 0;
  67.     Header.CtlWidth.left = 29;
  68.     Header.CtlWidth.bottom = 33;
  69.     Header.CtlWidth.right = 15;
  70.     Header.VScroll = 0L;
  71.     Header.HScroll = 0L;
  72.  
  73.     aLong = (long)(TotalDuration * srate);
  74.     resid =  (int)(aLong % 512L);
  75.     if ( resid != 0 ) {
  76.         aLong += (long)(512 - resid) + 512L;;
  77.     }
  78.     Header.FileSize = aLong * sizeof(int);
  79.     PstringCopy((char *)Header.BUName, "\p");            
  80.     PstringCopy((char *)Header.FileName, (char *)SoundFileName);            
  81.     Header.BURefNum = 0;            
  82.     Header.refNum = myIOParmBlk.ioRefNum;                        
  83.     Header.vRefNum = myIOParmBlk.ioVRefNum;
  84.     Header.BufChanged = 0;
  85.     Header.FileChanged = 0;
  86.     Header.NoBackup = 0;
  87.     Header.Mode = 0;
  88.     Header.Edit.HiAddr = 0L;
  89.     Header.Edit.LoAddr = 0L;
  90.     Header.Edit.ExtendSide = 0;
  91.     Header.CursorPos = 0L;
  92.     Header.CursorRgn =     0L;
  93.     for ( i = 0; i < 10; i++ ) {
  94.         Header.MarkerData[i].Free = 1;
  95.         Header.MarkerData[i].Position = 0L;
  96.         PstringCopy((char *)Header.MarkerData[i].Name, "\p");
  97.     }
  98.     Header.MarkerOffset = 0L;
  99.     Header.LoopStart =     -1L;
  100.     Header.LoopEnd =     -1L;
  101.     Header.ZeroLineOn = 0;
  102.     Header.CursorOn = 0;
  103.     Header.ScalesOn = 511;
  104.     PstringCopy((char *)Header.Comment, "\p");
  105.     Header.SampRate =     srate;
  106.     x = (1.0/srate) * 1000000.0;
  107.     Header.SampPeriod = (long)(x + 0.5);
  108.     Header.SampSize = 16;
  109.     PstringCopy((char *)Header.CodeType, "\pLinear");
  110.     PstringCopy((char *)Header.UserStr1, "\p");
  111.     Header.BufSize = 0L;
  112.     Header.Loop2Start = -1L;
  113.     Header.Loop2End = -1L;
  114.     Header.Loop1Type = 1;
  115.     Header.Loop2Type = 1;
  116.     Header.User4 = 0;
  117.  
  118. /* write out header info */
  119.     myIOParmBlk.ioReqCount = Header.HeaderSize;
  120.     myIOParmBlk.ioBuffer = (Ptr)HeaderPtr;
  121.     if ( (errnum = PBWrite(&myIOParmBlk, FALSE)) != noErr ) { 
  122.         PstringCopy((char *)theMess1, "\pError writing Header to sample file");
  123.         OSError(theMess1, NIL, NIL);
  124.     }
  125.     if ( myIOParmBlk.ioActCount != Header.HeaderSize) {
  126.         PstringCopy((char *)theMess1, "\pError writing Header to file, wrote wrong number of bytes");
  127.         OSError(theMess1, NIL, NIL);
  128.     }
  129. }